#!/usr/bin/perl

use AcessDB;

#metodo Geral de Busca por Pecas
sub  buscarPecas{

	$barCode = $_[0];
	$tipoPeca = $_[1];
	
	if(defined($barCode) && !($barCode eq '')) {
		buscarPecasCodigoBarras($barCode);
	}
	
	elsif(!($tipoPeca eq '')) {
		buscarPecasCaracteristicas($tipoPeca, $_[2], $_[3], $_[4], $_[5], $_[6], $_[7], $_[8], $_[9], $_[10], $_[11], $_[12], $_[13], $_[14], $_[15], $_[16]);
	}
	else {
		print qq(<FONT COLOR="RED"> Parametros de Busca Insuficientes.</FONTE></br>\n);
	}
}

#buscar Pecas pelo codigo de barras
sub buscarPecasCodigoBarras(){
	$barCode = $_[0];

	#conecta ao BD
	$bd = AcessDB->new();
	$bd->ConnectDB();

	#escolhe as tabelas de acordo com o codigo de barras
	$tipo = substr ($barCode,0,2); 

	$atributos = "P.CodigoBarras, P.Testado, P.Fabricante, P.DataRegistro, P.Origem, P.CodigoBarrasPC";
	
	#variaveis especificas de cada tipo de peca
	if($tipo eq "PM"){
		$table = "PlacaMae";
		
		$atributos = "$atributos, T.Modelo, T.Socket, T.QtdSlotsMemoria, T.SomOnBoard, T.PortaUSB, T.InterfaceSCSI, T.InterfaceSATA, T.InterfaceIDE, T.BarramentoAGP, T.BarramentoISA, T.BarramentoPCI";
	}
	elsif ($tipo eq "PV") {
		$table = "PlacaVideo";

		$atributos = "$atributos, T.Memoria, T.Processador, T.Aceleradora3D";

	}
	elsif ($tipo eq "PR") {
		$table = "PlacaRede";

		$atributos = "$atributos, T.Modelo, T.TaxaTransmissao";

	}
	elsif ($tipo eq "MM") {
		$table = "Memoria";

		$atributos = "$atributos, T.Tipo, T.Tamanho";

	}
	elsif ($tipo eq "PC") {
		$table = "Processador";

		$atributos = "$atributos, T.Tipo, T.Velocidade, T.Socket";

	}
	elsif ($tipo eq "FT") {
		$table = "Fonte";

		$atributos = "$atributos, T.Potencia, T. Tipo, T.Conector, T.QuantidadePinos";

	}
	elsif ($tipo eq "DO") {
		$table = "DriverOptico";

		$atributos = "$atributos, T.Velocidade, T.Tipo";

	}
	elsif ($tipo eq "DQ") {
		$table = "Disquete";
	}
	elsif ($tipo eq "HD") {
		$table = "HD";

		$atributos = "$atributos, T.Tamanho, T.Tipo";

	}
	else{
		print qq(<FONT COLOR="RED"> O codigo de barras nao pertence a uma peca.</FONTE></br>\n);
	}

	$h = $bd->query("SELECT $atributos FROM Pecas P, $table T WHERE P.CodigoBarras = T.CodigoBarras AND P.CodigoBarras = '$barCode';");

	if(imprimirResposta($h) == 0) {print qq(<FONT COLOR="RED"> A busca nao obteve resposta.</FONTE></br>\n);}

}

sub buscarPecasCaracteristicas(){

	#conecta ao BD
	$bd = AcessDB->new();
	$bd->ConnectDB();

	# variaveis para formatar a resposta e a query
	$atributos = "P.CodigoBarras, P.Testado, P.Fabricante, P.DataRegistro, P.Origem, P.CodigoBarrasPC";
	$where = "WHERE P.CodigoBarras = T.CodigoBarras";

	# verifica um conjunto de caracteristicas pra cada tipo de peca
	$tipo = $_[0];

	# variaveis que toda peca tem
	$Testado = $_[1];
	$Fabricante = $_[2];
	$DataRegistro = $_[3];
	$Origem 	= $_[4];
	$CodigoBarrasPC  = $_[5];

	if (!($Testado eq '')) 		{ $where = "$where AND P.Testado = '$Testado'"; }
	if (!($Fabricante eq ''))	{ $where = "$where AND P.Fabricante = '$Fabricante'";}
	if (!($DataRegistro eq '')) 	{ $where = "$where AND P.DataRegistro = '$DataRegistro'";}
	if (!($Origem eq '')) 		{ $where= "$where AND P.Origem = '$Origem'";}
	if (!($CodigoBarrasPC eq '')) 	{ $where = "$where AND P.CodigoBarrasPC = '$CodigoBarrasPC'";}


	#variaveis especificas de cada tipo de peca
	if($tipo eq "PM"){
		$table = "PlacaMae";
		$Modelo 	 = $_[6]; 
		$Socket 	 = $_[7];
		$QtdSlotsMemoria = $_[8];
		$SomOnBoard 	 = $_[9];
		$PortaUSB 	 = $_[10];
		$InterfaceSCSI	 = $_[11];
		$InterfaceSATA 	 = $_[12];
		$InterfaceIDE 	 = $_[13];
		$BarramentoAGP 	 = $_[14];
		$BarramentoISA 	 = $_[15];
		$BarramentoPCI 	 = $_[16];

		$atributos = "$atributos, T.Modelo, T.Socket, T.QtdSlotsMemoria, T.SomOnBoard, T.PortaUSB, T.InterfaceSCSI, T.InterfaceSATA, T.InterfaceIDE, T.BarramentoAGP, T.BarramentoISA, T.BarramentoPCI";
		
		if(!($Modelo eq '')) 		{ $where = "$where AND T.Modelo = '$Modelo'"; }
		if(!($Socket eq '')) 		{ $where = "$where AND T.Socket = '$Socket'"; }
		if(!($QtdSlotsMemoria eq '')) 	{ $where = "$where AND T.QtdSlotsMemoria = '$QtdSlotsMemoria'"; }
		if(!($SomOnBoard eq ''))	{ $where = "$where AND T.SomOnBoard = '$SomOnBoard'"; }
		if(!($PortaUSB eq '')) 		{ $where = "$where AND T.PortaUSB = '$PortaUSB'"; }
		if(!($InterfaceSCSI eq '')) 	{ $where = "$where AND T.InterfaceSCSI = '$InterfaceSCSI'"; }
		if(!($InterfaceSATA eq '')) 	{ $where = "$where AND T.InterfaceSATA = '$InterfaceSATA'"; }
		if(!($InterfaceIDE eq '')) 	{ $where = "$where AND T.InterfaceIDE = '$InterfaceIDE'"; }
		if(!($BarramentoAGP eq '')) 	{ $where = "$where AND T.BarramentoAGP = '$BarramentoAGP'"; }
		if(!($BarramentoISA eq '')) 	{ $where = "$where AND T.BarramentoISA = '$BarramentoISA'"; }
		if(!($BarramentoPCI eq '')) 	{ $where = "$where AND T.BarramentoPCI = '$BarramentoPCI'"; }

	}
	elsif ($tipo eq "PV") {
		$table = "PlacaVideo";
		$Memoria = $_[6];
		$Processador = $_[7];
		$Aceleradora3D = $_[8];

		$atributos = "$atributos, T.Memoria, T.Processador, T.Aceleradora3D";

		if(!($Memoria eq '')) 		{ $where = "$where AND T.Memoria = '$Memoria'"; }
		if(!($Processador eq '')) 	{ $where = "$where AND T.Processador = '$Processador'"; }
		if(!($Aceleradora3D eq '')) 	{ $where = "$where AND T.Aceleradora3D = '$Aceleradora3D'"; }
	}
	elsif ($tipo eq "PR") {
		$table = "PlacaRede";
		$Modelo = $_[6];
		$TaxaTransmissao = $_[7];

		$atributos = "$atributos, T.Modelo, T.TaxaTransmissao";

		if(!($Modelo eq ''))	 	{ $where = "$where AND T.Modelo = '$Modelo'"; }
		if(!($TaxaTransmissao eq '')) 	{ $where = "$where AND T.TaxaTransmissao = '$TaxaTransmissao'"; }

	}
	elsif ($tipo eq "MM") {
		$table = "Memoria";
		$Tipo = $_[6];
		$Tamanho = $_[7];

		$atributos = "$atributos, T.Tipo, T.Tamanho";

		if(!($Tipo eq '')) 		{ $where = "$where AND T.Tipo = '$Tipo'"; }
		if(!($Tamanho eq '')) 		{ $where = "$where AND T.Tamanho = '$Tamanho'"; }

	}
	elsif ($tipo eq "PC") {
		$table = "Processador";
		$Tipo = $_[6];
		$Velocidade = $_[7];
		$Socket = $_[8];

		$atributos = "$atributos, T.Tipo, T.Velocidade, T.Socket";

		if(!($Tipo eq '')) 		{ $where = "$where AND T.Tipo = '$Tipo'"; }
		if(!($Velocidade eq '')) 	{ $where = "$where AND T.Velocidade = '$Velocidade'"; }
		if(!($Socket eq '')) 		{ $where = "$where AND T.Socket = '$Socket'"; }

	}
	elsif ($tipo eq "FT") {
		$table = "Fonte";
		$Potencia = $_[6];
		$Tipo = $_[7];
		$Conector = $_[8];
		$QuantidadePinos = $_[9];

		$atributos = "$atributos, T.Potencia, T. Tipo, T.Conector, T.QuantidadePinos";

		if(!($Potencia eq '')) 		{ $where = "$where AND T.Potencia = '$Potenia'"; }
		if(!($Tipo eq '')) 		{ $where = "$where AND T.Tipo = '$Tipo'"; }
		if(!($Conector eq ''))	 	{ $where = "$where AND T.Conector = '$Conector'"; }
		if(!($QuantidadePinos eq '')) 	{ $where = "$where AND T.QuantidadePinos = '$QuantidadePinos'"; }

	}
	elsif ($tipo eq "DO") {
		$table = "DriverOptico";
		$Velocidade = $_[6];
		$Tipo = $_[7];

		$atributos = "$atributos, T.Velocidade, T.Tipo";

		if(!($Velocidade eq '')) 	{ $where = "$where AND T.Velocidade = '$Velocidade'"; }
		if(!($Tipo eq '')) 		{ $where = "$where AND T.Tipo = '$Tipo'"; }

	}
	elsif ($tipo eq "DQ") {
		$table = "Disquete";
	}
	elsif ($tipo eq "HD") {
		$table = "HD";
		$Tamanho = $_[6];
		$Tipo = $_[7];

		$atributos = "$atributos, T.Tamanho, T.Tipo";

		if(!($Tamanho eq '')) 		{ $where = "$where AND T.Tamanho = '$Tamanho'"; }
		if(!($Tipo eq '')) 		{ $where = "$where AND T.Tipo = '$Tipo'"; }

	}
	else{
		print qq(<FONT COLOR="RED"> Erro ao reconhecer o tipo de peca.</FONTE></br>\n);
	}

	$query = "SELECT $atributos FROM Pecas P, $table T $where;";
	
	#print "DEGUB = (query = $query).\n";
	$h = $bd->query($query);

	if(imprimirResposta($h) == 0) {print qq(<FONT COLOR="RED"> A busca nao obteve resposta.</FONTE></br>\n);}
}

sub imprimirResposta{

	$h = $_[0];

	$hadAnswer = 0;
	# Se houve resposta a query fica nesse while ate imprimir todas as respostas
	while(@line = $h->fetchrow_array()){
		#print "line from $table: ";
		if (defined(@line)) {$hadAnswer = 1;}

		foreach $colum (@line){
			print $colum." ";
		}
		print "\n";
	}
	return $hadAnswer;
}
1;

